package com.pipa.empleado.managed;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import com.pipa.catalogo.entity.Departamento;
import com.pipa.catalogo.entity.Distrito;
import com.pipa.catalogo.entity.Provincia;
import com.pipa.catalogo.entity.TipoEmpleado;
import com.pipa.empleado.entity.Empleado;
import com.pipa.empleado.service.EmpleadoService;
import com.pipa.empleado.service.EmpleadoServiceImpl;

@ManagedBean(name="tagen")
@SessionScoped
public class EmpleadoBean implements Serializable{
	private static final long serialVersionUID = 1L;
	String titleEmpleado ="";
	String mensaje="";
	EmpleadoService servicio = new EmpleadoServiceImpl();
	List<Empleado> empleados = new ArrayList<Empleado>();
	Empleado empleado = new Empleado();
	Departamento departamento = new Departamento();
	List<Departamento> listadoDepartamento = new ArrayList<Departamento>();
	ArrayList<SelectItem> listadoDepartamentoItem= new ArrayList<SelectItem>();
	Provincia provincia = new Provincia();
	List<Provincia> listadoProvincia = new ArrayList<Provincia>();
	ArrayList<SelectItem> listadoProvinciaItem= new ArrayList<SelectItem>();
	Distrito distrito = new Distrito();
	List<Distrito> listadoDistrito = new ArrayList<Distrito>();
	ArrayList<SelectItem> listadoDistritoItem= new ArrayList<SelectItem>();
	TipoEmpleado tipoEmpleado = new TipoEmpleado();
	
	public String cargarEmpleados(){
		try {
			empleados = servicio.getEmpleados();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return "/paginas/mantenerEmpleado";
	}
	
	public String showGrabarEmpleado(String titulo) {  
		try {		 
		 listadoDepartamentoItem.clear();
		 listadoProvinciaItem.clear();
		 listadoDistritoItem.clear();
	     listadoDepartamento = servicio.getDepartamentos(); 	 
	 	 for(int i = 0; i < listadoDepartamento.size(); i++) {
	 		listadoDepartamentoItem.add(new SelectItem(listadoDepartamento.get(i).getCodigo(),listadoDepartamento.get(i).getDescripcion()));
		 }
	 	 setTitleEmpleado(titulo);
	 	if(titulo.contains("Modificar")){
			 int agecve = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("agecve"));
			 for (Empleado emp : empleados) {
				if(emp.getAgecve()==agecve){
					empleado = emp;
					departamento = empleado.getAgedpt();
					provincia = empleado.getAgepro();
					distrito = empleado.getAgedis();
					tipoEmpleado = empleado.getAgetip();
					onDepartamentoChange();
					onProvinciaChange();
					break;
				}
			}
		 }else{
			 empleado = new Empleado();
			 departamento = new Departamento();
			 provincia = new Provincia();
			 distrito = new Distrito();

			 
		 }
		} catch (Exception e) {
			e.printStackTrace();	
		}
		return "/paginas/pempleado";
	} 	 
	
	public void onDepartamentoChange() {
	    try {
	    	if(!departamento.getCodigo().equals("")){
	    		listadoProvinciaItem.clear();
	    		listadoDistritoItem.clear();
	    		listadoProvincia = servicio.getProvincia(departamento.getCodigo().substring(0,2));
	    		System.out.println(listadoProvincia.size());
	    		for(int i = 0; i < listadoProvincia.size(); i++) {
	    			listadoProvinciaItem.add(new SelectItem(listadoProvincia.get(i).getCodigo(),listadoProvincia.get(i).getDescripcion()));
	    		}
	    	}else{
	    		listadoProvinciaItem.clear();
	    		listadoDistritoItem.clear();
	    	}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public void onProvinciaChange() {
	    try {
	    	if(!provincia.getCodigo().equals("")){
	    		listadoDistritoItem.clear();
	    		listadoDistrito = servicio.getDistrito(provincia.getCodigo().substring(0,4));
	    		for(int i = 0; i < listadoDistrito.size(); i++) {
	    			listadoDistritoItem.add(new SelectItem(listadoDistrito.get(i).getCodigo(),listadoDistrito.get(i).getDescripcion()));
	    		}
	    	}else{
	    		listadoDistritoItem.clear();
	    	}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public String cancelar(){
		return "/paginas/mantenerEmpleado";
	}

	public String registrar(){
		mensaje="";
		String resultado = "";
		if(empleado.getAgenom().equals("")){
			mensaje="-Campo nombres y apellidos obligatorios.\n";
		}
		if(empleado.getAgedir().equals("")){
			mensaje+="-Campo direccion obligatorio.\n";
		}
		if(departamento.getCodigo().equals("")){
			mensaje+="-Seleccione un departamento.\n";
		}
		if(provincia.getCodigo().equals("")){
			mensaje+="-Seleccione una provincia.\n";
		}
		if(distrito.getCodigo().equals("")){
			mensaje+="-Seleccione un distrito.\n";
		}
		if(empleado.getAgete1().equals("")){
			mensaje+="-Campo telefono obligatorio.\n";
		}
		if(tipoEmpleado.getCodigo().equals("")){
			mensaje+="-Seleccione un tipo.\n";
		}
		
		if(mensaje.equals("")){
			empleado.setAgedpt(departamento);
			empleado.setAgepro(provincia);
			empleado.setAgedis(distrito);
			empleado.setAgetip(tipoEmpleado);
			try {
				if(titleEmpleado.contains("Modificar")){
					if(servicio.modificarEmpleado(empleado)>0){
						System.out.println("modifico");
					}
				}else{
					if(servicio.registrarEmpleado(empleado)>0){
						System.out.println("registro");
					}
				}
				cargarEmpleados();
				resultado = "/paginas/mantenerEmpleado";
			} catch (SQLException e){
				e.printStackTrace();
			}
			//FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Successful",  "Registro Exitoso"));
		}else{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error",  mensaje));
			resultado="/paginas/pempleado";
		}
		return resultado;
	}
	
	public List<Empleado> getEmpleados() {
		return empleados;
	}

	public void setEmpleados(List<Empleado> empleados) {
		this.empleados = empleados;
	}

	public Empleado getEmpleado() {
		return empleado;
	}

	public void setEmpleado(Empleado empleado) {
		this.empleado = empleado;
	}

	public Departamento getDepartamento() {
		return departamento;
	}

	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	public List<Departamento> getListadoDepartamento() {
		return listadoDepartamento;
	}

	public void setListadoDepartamento(List<Departamento> listadoDepartamento) {
		this.listadoDepartamento = listadoDepartamento;
	}

	public ArrayList<SelectItem> getListadoDepartamentoItem() {
		return listadoDepartamentoItem;
	}

	public void setListadoDepartamentoItem(
			ArrayList<SelectItem> listadoDepartamentoItem) {
		this.listadoDepartamentoItem = listadoDepartamentoItem;
	}

	public Provincia getProvincia() {
		return provincia;
	}

	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	public List<Provincia> getListadoProvincia() {
		return listadoProvincia;
	}

	public void setListadoProvincia(List<Provincia> listadoProvincia) {
		this.listadoProvincia = listadoProvincia;
	}

	public ArrayList<SelectItem> getListadoProvinciaItem() {
		return listadoProvinciaItem;
	}

	public void setListadoProvinciaItem(ArrayList<SelectItem> listadoProvinciaItem) {
		this.listadoProvinciaItem = listadoProvinciaItem;
	}

	public Distrito getDistrito() {
		return distrito;
	}

	public void setDistrito(Distrito distrito) {
		this.distrito = distrito;
	}

	public List<Distrito> getListadoDistrito() {
		return listadoDistrito;
	}

	public void setListadoDistrito(List<Distrito> listadoDistrito) {
		this.listadoDistrito = listadoDistrito;
	}

	public ArrayList<SelectItem> getListadoDistritoItem() {
		return listadoDistritoItem;
	}

	public void setListadoDistritoItem(ArrayList<SelectItem> listadoDistritoItem) {
		this.listadoDistritoItem = listadoDistritoItem;
	}

	public TipoEmpleado getTipoEmpleado() {
		return tipoEmpleado;
	}

	public void setTipoEmpleado(TipoEmpleado tipoEmpleado) {
		this.tipoEmpleado = tipoEmpleado;
	}

	public String getTitleEmpleado() {
		return titleEmpleado;
	}

	public void setTitleEmpleado(String titleEmpleado) {
		this.titleEmpleado = titleEmpleado;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}
	
	
}